package com.fyzk.utils;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import android.os.Debug;
import android.os.Environment;
import android.util.Log;

public class L {
	private static final boolean flag = true;

	public static void i(String tag, String msg) {
		if (flag)
			Log.i(tag, msg);
	}

	public static void d(String tag, String msg) {
		if (flag)
			Log.d(tag, msg);
	}

	public static void e(String tag, String msg) {
		if (flag)
			Log.e(tag, msg);
		String FileDate = File.separator + sdfDir.format(new Date());
		writeFile(path + FileDate + File.separator, sdftime.format(new Date())
				+ " " + tag + "  " + msg + "\r\n", true);
	}

	public static void v(String tag, String msg) {
		// TODO Auto-generated method stub
		if (flag)
			Log.v(tag, msg);
	}

	/** 日志格式:文件名 */
	private static SimpleDateFormat sdfDir = new SimpleDateFormat("yyyy-MM-dd");
	// private static SimpleDateFormat sdfFile = new
	// SimpleDateFormat("yyyy-MM-dd-HH-mm");
	private static SimpleDateFormat sdfFile = new SimpleDateFormat(
			"yyyy-MM-dd-HH");
	/** 日志格式:文件内容 */
	private static SimpleDateFormat sdftime = new SimpleDateFormat(
			"yyyy-MM-dd HH:mm:ss.SSS");
	static String path_fileFolder = Environment.getExternalStorageDirectory()
			.getAbsolutePath() + File.separator + "dajiang";
	/** 日志存储路径 */
	static String path = path_fileFolder + File.separator + "log";

	// /** 定期删除日志*/
	// private static final int SDCARD_LOG_FILE_SAVE_DAYS = 7;

	// private Log() {
	// //
	// }

	// /**
	// * 输出info信息
	// * @param tag 标签
	// * @param msg 信息内容
	// */
	// public static void i(String tag, String msg) {
	// if (MODE_LOG_OUTPUT_DEBUG) {
	// String FileDate = File.separator + sdfDir.format(new Date());
	// writeFile(path + FileDate + File.separator, sdftime.format(new Date()) +
	// " " + tag + "  " + msg + "\r\n", true);
	//
	// android.util.Log.i(tag, msg);
	// }
	// }
	//
	// /**
	// * 输出debug信息
	// * @param tag 标签
	// * @param msg 信息内容
	// */
	// public static void d(String tag, String msg) {
	// if (MODE_LOG_OUTPUT_DEBUG) {
	// String FileDate = File.separator + sdfDir.format(new Date());
	// writeFile(path + FileDate + File.separator, sdftime.format(new Date()) +
	// " " + tag + "  " + msg + "\r\n", true);
	//
	// android.util.Log.d(tag, msg);
	// }
	// }
	//
	//
	// /**
	// * 输出verbose信息
	// * @param tag 标签
	// * @param msg 信息内容
	// */
	// public static void v(String tag, String msg) {
	// if (MODE_LOG_OUTPUT_DEBUG) {
	// String FileDate = File.separator + sdfDir.format(new Date());
	// writeFile(path + FileDate + File.separator, sdftime.format(new Date()) +
	// " " + tag + "  " + msg + "\r\n", true);
	//
	// android.util.Log.v(tag, msg);
	// }
	// }
	//
	// /**
	// * 输出debug信息
	// * @param tag 标签
	// * @param msg 信息内容
	// * @param tr 例外
	// */
	// public static void d(String tag, String msg, Throwable tr) {
	// if (MODE_LOG_OUTPUT_DEBUG) {
	// String FileDate = File.separator + sdfDir.format(new Date());
	// writeFile(path + FileDate + File.separator, sdftime.format(new Date()) +
	// " " + tag + "  " + msg + tr.toString() + "\r\n", true);
	//
	// android.util.Log.d(tag, msg, tr);
	// }
	// }
	//
	// /**
	// * 输出error信息
	// * @param tag 标签
	// * @param msg 信息内容
	// */
	// public static void e(String tag, String msg) {
	// if (MODE_LOG_OUTPUT_ERROR) {
	//
	//
	// android.util.Log.e(tag, msg);
	// }
	// }
	//
	// /**
	// * 输出error信息
	// * @param tag 标签
	// * @param msg 信息内容
	// * @param tr 例外
	// */
	// public static void e(String tag, String msg, Throwable tr) {
	// if (MODE_LOG_OUTPUT_ERROR) {
	// String FileDate = File.separator + sdfDir.format(new Date());
	// writeFile(path + FileDate + File.separator, sdftime.format(new Date()) +
	// " " + tag + "  " + msg + tr.toString() + "\r\n", true);
	//
	// android.util.Log.e(tag, msg, tr);
	// }
	// }
	//
	/**
	 * 创建日志的输出目录
	 */
	private static void makeFileDir() {

		String FileDate = File.separator + sdfDir.format(new Date());
		File file = new File(path + FileDate);
		boolean mkOk;
		if (!file.isDirectory() && !file.exists()) {
			mkOk = file.mkdirs();
			if (!mkOk) {
				mkOk = file.mkdirs();
			}
		}
		// deleteSDcardExpiredLog();
	}

	/**
	 * 删除单个文件
	 * 
	 * @param filePath
	 *            被删除文件的文件名
	 * @return 文件删除成功返回true，否则返回false
	 */
	public static boolean deleteFile(String filePath) {
		File file = new File(filePath);
		if (file.isFile() && file.exists()) {
			return file.delete();
		}
		return false;
	}

	/**
	 * 根据路径删除指定的目录或文件，无论存在与否
	 * 
	 * @param filePath
	 *            要删除的目录或文件
	 * @return 删除成功返回 true，否则返回 false。
	 */
	public boolean DeleteFolder(String filePath) {
		File file = new File(filePath);
		if (!file.exists()) {
			return false;
		} else {
			if (file.isFile()) {
				// 为文件时调用删除文件方法
				return deleteFile(filePath);
			} else {
				// 为目录时调用删除目录方法
				return deleteDirectory(filePath);
			}
		}
	}

	/**
	 * 删除文件夹以及目录下的文件
	 * 
	 * @param filePath
	 *            被删除目录的文件路径
	 * @return 目录删除成功返回true，否则返回false
	 */
	public static boolean deleteDirectory(String filePath) {
		boolean flag = false;
		// 如果filePath不以文件分隔符结尾，自动添加文件分隔符
		if (!filePath.endsWith(File.separator)) {
			filePath = filePath + File.separator;
		}
		File dirFile = new File(filePath);
		if (!dirFile.exists() || !dirFile.isDirectory()) {
			return false;
		}
		flag = true;
		File[] files = dirFile.listFiles();
		// 遍历删除文件夹下的所有文件(包括子目录)
		for (int i = 0; i < files.length; i++) {
			if (files[i].isFile()) {
				// 删除子文件
				flag = deleteFile(files[i].getAbsolutePath());
				if (!flag)
					break;
			} else {
				// 删除子目录
				flag = deleteDirectory(files[i].getAbsolutePath());
				if (!flag)
					break;
			}
		}
		if (!flag)
			return false;
		// 删除当前空目录
		return dirFile.delete();
	}

	/**
	 * 输出信息内容
	 * 
	 * @param dirpath
	 *            输出目录
	 * @param content
	 *            输出内容
	 * @param append
	 */
	public static void writeFile(String dirpath, String content, boolean append) {
		if (!flag) {
			File fileFolder = new File(path_fileFolder);
			if(!fileFolder.exists()){
				return;
			}
			File[] files = fileFolder.listFiles();
			for (int i = 0; i < files.length; i++) {
				if (files[i].isFile()) {
					// 删除子文件
					boolean flag1 = deleteFile(files[i].getAbsolutePath());
					if (!flag1)
						break;
				} else {
					// 删除子目录
					boolean flag1  = deleteDirectory(files[i].getAbsolutePath());
					if (!flag1)
						break;
				}
			}

			fileFolder.delete();

		} else {
			PrintWriter out = null;
			File writefile;
			try {
				makeFileDir();

				// 通过这个对象来判断是否向文本文件中追加内容
				String logFileName = sdfFile.format(new Date()) + ".txt";
				writefile = new File(dirpath + logFileName);

				// 如果文本文件不存在则创建它
				if (writefile.exists() == false) {
					writefile.createNewFile();
					writefile = new File(dirpath + logFileName); // 重新实例化
				}
				out = new PrintWriter(new OutputStreamWriter(
						new FileOutputStream(writefile, true)));

				out.write(content);
				out.flush();
			} catch (Exception ex) {
				System.out.println(ex.getMessage());
			} finally {
				if (out != null)
					out.close();
			}
		}

	}

}